// Problem: P3372 【模板】线段树 1
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P3372
// Memory Limit: 125 MB
// Time Limit: 1000 ms
// DateTime : 2024-11-20 13:40:46
// Author : sunyafei
//
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>
using namespace std;

#define int long long

class BIT{
private:
	vector<int> t;
public:
	BIT(int n){
		t.resize(n);
	}

	inline int lowbit(int x){
		return x&-x;
	}

	void add(int i,int x){
		while(i<t.size()){
			t[i]+=x;
			i+=lowbit(i);
		}
	}

	int query(int i){
		int res=0;
		while(i>0){
			res+=t[i];
			i-=lowbit(i);
		}
		return res;
	}
};


void solve(){
	int n,m;cin>>n>>m;
	vector<int> a(n),pre(n+1);
	for(int i=0;i<n;i++){
		cin>>a[i];
		pre[i+1]=pre[i]+a[i];
	}
	BIT t1(n+1),t2(n+1);
	while(m--){
		int op,l,r;cin>>op>>l>>r;
		if(op==1){
			int k;cin>>k;
			t1.add(l,k);
			t1.add(r+1,-k);
			t2.add(l,l*k);
			t2.add(r+1,-(r+1)*k);
		}else{
			int res=pre[r]+(r+1)*t1.query(r)-t2.query(r);
			res-=pre[l-1]+l*t1.query(l-1)-t2.query(l-1);
			cout<<res<<"\n";
		}
	}
}

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	int t=1;
	//cin>>t;
	while(t--){
		solve();
		if(t)cout<<"\n";
	}
	return 0;
}
